package com.cloudkinto.common;

import cn.hutool.core.date.DateUtil;
import com.cloudkinto.bo.api.SkuAdjustItemApiBo;
import com.cloudkinto.bo.claim.ClaimAddBo;
import com.cloudkinto.bo.material.MaterialAddBo;
import com.cloudkinto.bo.material.MaterialUpdateBo;
import com.cloudkinto.bo.order.allocate.AllocatePlanAddBo;
import com.cloudkinto.bo.order.allocate.AllocatePlanUpdateBo;
import com.cloudkinto.bo.order.allocate.PairProductItemBo;
import com.cloudkinto.bo.order.inbound.NormalReceiptConfirmNewProductBo;
import com.cloudkinto.bo.order.inbound.OrderInputBoxAddBo;
import com.cloudkinto.bo.order.inbound.OrderInputSaveBo;
import com.cloudkinto.bo.order.outbound.NormalOrderOutboundSaveBo;
import com.cloudkinto.bo.order.outbound.NormalOutboundUpdateBo;
import com.cloudkinto.bo.order.outbound.TransferOrderOutboundSaveBo;
import com.cloudkinto.bo.order.outbound.TransferOutboundPackBo;
import com.cloudkinto.bo.product.ProductAddBo;
import com.cloudkinto.bo.product.ProductUpdateBo;
import com.cloudkinto.bo.sowWall.SowWallAddBo;
import com.cloudkinto.bo.storage.StorageAreaAddBo;
import com.cloudkinto.bo.storage.StorageAreaUpdateBo;
import com.cloudkinto.bo.storage.StorageLocationAddBo;
import com.cloudkinto.bo.storage.StorageLocationUpdateBo;
import com.cloudkinto.bo.warehouse.WarehouseAddBo;
import com.cloudkinto.bo.warehouse.WarehouseUpdateBo;
import com.cloudkinto.bo.workOrder.WorkOrderAddBo;
import com.cloudkinto.bo.workOrder.WorkOrderUpdateBo;
import com.cloudkinto.bo.workOrder.reply.WorkOrderReplyAddBo;
import com.cloudkinto.common.common.DateUtils;
import com.cloudkinto.dto.order.claim.ClaimOmsDto;
import com.cloudkinto.dto.order.claim.ClaimWmsDto;
import com.cloudkinto.dto.order.inbound.*;
import com.cloudkinto.dto.order.outbound.*;
import com.cloudkinto.dto.order.outbound.oldSys.OrderFileByBlackCatDto;
import com.cloudkinto.dto.order.outbound.oldSys.OrderFileBySagawaDto;
import com.cloudkinto.dto.order.outbound.oldSys.OrderFileByThirdPartyDto;
import com.cloudkinto.dto.order.outbound.oldSys.OutboundOldExportDto;
import com.cloudkinto.dto.order.returns.OrderReturnPageDto;
import com.cloudkinto.dto.order.returns.product.OrProductPageDto;
import com.cloudkinto.dto.platform.order.PlatOrderPageRes;
import com.cloudkinto.dto.product.ProductExportDtoV2;
import com.cloudkinto.dto.product.ProductImportDtoV2;
import com.cloudkinto.dto.product.ProductImportUpdateOmsDtoV2;
import com.cloudkinto.dto.stock.flowing.FlowingPageDto;
import com.cloudkinto.dto.stock.query.BoxTypeStockPageDto;
import com.cloudkinto.dto.stock.query.ComplexStockPageDto;
import com.cloudkinto.dto.stock.query.SkuStockPageDto;
import com.cloudkinto.dto.stock.rent.StockAgeDto;
import com.cloudkinto.dto.stock.snap.StockAgeEntity;
import com.cloudkinto.dto.stock.snap.sku.StockSkuSegmentPageDto;
import com.cloudkinto.dto.stock.snap.sku.StockSkuSnapPageDto;
import com.cloudkinto.dto.stock.stock.StockOmpExportByBox;
import com.cloudkinto.dto.stock.stock.StockOmpExportBySku;
import com.cloudkinto.dto.stock.stock.StockOmsExportByBox;
import com.cloudkinto.dto.stock.stock.StockOmsExportBySku;
import com.cloudkinto.dto.storage.StorageAreaImportDto;
import com.cloudkinto.dto.storage.StorageLocationAddImportDto;
import com.cloudkinto.entity.*;
import com.cloudkinto.service.cost.importVo.CostExportVo;
import com.cloudkinto.service.platform.vo.order.PlatformOrderExportVo;
import com.cloudkinto.service.stock.exportVo.*;
import com.cloudkinto.service.stock.exportVo.age.BoxStockAgeExportVo;
import com.cloudkinto.service.stock.exportVo.age.BoxStockSegAgeExportVo;
import com.cloudkinto.service.stock.exportVo.age.ProductStockAgeExportVo;
import com.cloudkinto.service.stock.exportVo.age.ProductStockSegAgeExportVo;
import com.cloudkinto.service.stock.vo.snap.StockCheckProductAddReq;
import com.cloudkinto.service.stock.vo.snap.StockCheckProductUpdateReq;
import com.cloudkinto.session.UserSession;
import com.cloudkinto.vo.claim.ClaimDetailVo;
import com.cloudkinto.vo.cost.CostAddEt;
import com.cloudkinto.vo.cost.CostInfoEntity;
import com.cloudkinto.vo.cost.CostPageVo;
import com.cloudkinto.vo.cost.Size;
import com.cloudkinto.vo.ft.FreightTempWeightAddReq;
import com.cloudkinto.vo.ft.FreightTempWeightUpdateReq;
import com.cloudkinto.vo.ft.FreightTempZonePriceAddReq;
import com.cloudkinto.vo.ft.surcharge.FreightOverScEt;
import com.cloudkinto.vo.ft.surcharge.FreightScFarawayUpdateReq;
import com.cloudkinto.vo.ft.surcharge.FreightScOverUpdateReq;
import com.cloudkinto.vo.ft.surcharge.FreightScSignUpdateReq;
import com.cloudkinto.vo.ob.ObRuleConditionAddReq;
import com.cloudkinto.vo.ob.OperateBillDetailRes;
import com.cloudkinto.vo.order.allocate.AllocatePickingDetail;
import com.cloudkinto.vo.order.allocate.AllocatePlanBatchVo;
import com.cloudkinto.vo.order.inbound.InputBoxTypeNumberVo;
import com.cloudkinto.vo.order.inbound.OrderInputDetailVo;
import com.cloudkinto.vo.order.inbound.OrderInputListVo;
import com.cloudkinto.vo.order.inbound.OrderScanResultVo;
import com.cloudkinto.vo.order.outbound.*;
import com.cloudkinto.vo.order.returns.print.PrintSkuEt;
import com.cloudkinto.vo.order.shelf.OrderInputShelfDetailVo;
import com.cloudkinto.vo.product.ProductVo;
import com.cloudkinto.vo.regular.PlatRegularInfoAddReq;
import com.cloudkinto.vo.regular.split.PlatRegularSplitInfoAddReq;
import com.cloudkinto.vo.sc.ScFarawayInfoPageVo;
import com.cloudkinto.vo.sc.importVo.FarawayDetailExportVo;
import com.cloudkinto.vo.stock.ProductFlowingInEt;
import com.cloudkinto.vo.stock.ProductFlowingOutEt;
import com.cloudkinto.vo.stock.adjust.sku.SkuAdjustItemReq;
import com.cloudkinto.vo.user.UserLoginSuccessRes;
import com.cloudkinto.vo.workOrder.WorkOrderDetail;
import com.cloudkinto.vo.workOrder.WorkOrderVo;
import com.cloudkinto.vo.wr.QsCustomerEtVo;
import com.cloudkinto.vo.wr.QsCustomerVoVo;
import com.cloudkinto.vo.wr.cost.OrderOutCostReq;
import com.cloudkinto.vo.wr.trial.TrialBoxReq;
import com.cloudkinto.vo.wr.trial.TrialFreightUtilReq;
import com.cloudkinto.vo.wr.trial.TrialOmsReq;
import com.cloudkinto.vo.wr.trial.TrialProductReq;
import org.apache.commons.lang3.StringUtils;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;

import java.util.Date;
import java.util.List;

/**
 * @author zhujiale
 * @description 对象拷贝公共
 * @date 2022/9/19
 */
@Mapper
public interface BeanConvert {

    BeanConvert INSTANCE = Mappers.getMapper(BeanConvert.class);

    @Named("objectIdToString")
    default String objectIdToString(Object value) {
        if (value == null) {
            return null;
        }
        return String.valueOf(value);
    }

    @Named("stringToInteger")
    default Integer stringToInteger(String value) {
        if (StringUtils.isBlank(value)) {
            return null;
        } else {
            //判断字符串是否为数字
            if (!StringUtils.isNumeric(value)) {
                return null;
            }
            return Integer.parseInt(value);
        }
    }

    @Named("stringToDate")
    default Date stringToDate(String value) {
        if (StringUtils.isBlank(value)) {
            return null;
        } else {
            if (DateUtils.regexCheckDate1(value)) {
                return DateUtil.parse(value, "yyyy-MM-dd");
            } else if (DateUtils.regexCheckDate2(value)) {
                return DateUtil.parse(value, "yyyy/MM/dd");
            } else if (DateUtils.regexCheckDateTime1(value)) {
                return DateUtil.parse(value, "yyyy-MM-dd HH:mm:ss");
            } else if (DateUtils.regexCheckDateTime2(value)) {
                return DateUtil.parse(value, "yyyy/MM/dd HH:mm:ss");
            } else {
                return null;
            }
        }
    }

    PlatformOrderDo platformOrderDo(PlatOrderPageRes source);

    List<BoxStockSegAgeExportVo> boxStockSegAgeExportVo(List<StockSkuSegmentPageDto> source);

    List<ProductStockSegAgeExportVo> productStockSegAgeExportVo(List<StockSkuSegmentPageDto> source);

    List<BoxStockAgeExportVo> boxStockAgeExportVo(List<StockSkuSnapPageDto> source);

    List<ProductStockAgeExportVo> productStockAgeExportVo(List<StockSkuSnapPageDto> source);

    List<ComplexStockExportVo> complexStockExportVo(List<ComplexStockPageDto> source);

    List<ProductFlowingWmsExportVo> productFlowingWmsExportVo(List<FlowingPageDto> source);

    List<BoxFlowingWmsExportVo> boxFlowingWmsExportVo(List<FlowingPageDto> source);

    List<BoxFlowingOmpExportVo> boxFlowingOmpExportVo(List<FlowingPageDto> source);

    List<ProductFlowingOmpExportVo> productFlowingOmpExportVo(List<FlowingPageDto> source);

    List<BoxFlowingOmsExportVo> boxFlowingOmsExportVo(List<FlowingPageDto> source);

    List<ProductFlowingOmsExportVo> productFlowingOmsExportVo(List<FlowingPageDto> source);

    List<PlatformOrderExportVo> platformOrderExportVos(List<PlatOrderPageRes> source);

    List<CostExportVo> costExportVo(List<CostPageVo> source);

    List<StockCheckProductAddReq> stockCheckProductAddReq1(List<StockCheckProductDo> source);

    List<StockCheckProductAddReq> stockCheckProductAddReq(List<StockCheckProductUpdateReq> source);

    List<StockCheckProductUpdateReq> stockCheckProductUpdateReq(List<StockCheckProductDo> source);

    //    List<PrintSkuEt> orProductPageDtoDeL(List<OrProductPageDto> sourceList);
    @Mapping(source = "deliveryQty", target = "qty")
    PrintSkuEt orProductPageDtoDe(OrProductPageDto sourceList);

    //    List<PrintSkuEt> orProductPageDtoReL(List<OrProductPageDto> sourceList);
    @Mapping(source = "receiveQty", target = "qty")
    PrintSkuEt orProductPageDtoRe(OrProductPageDto sourceList);

    TrialFreightUtilReq trialFreightUtilReq(OrderOutCostReq source);

    StockAgeEntity stockAgeEntity(StockAgeDto source);

    UserLoginSuccessRes userLoginSuccessRes(UserSession source);

    List<StockAgeEntity> stockAgeEntity(List<StockAgeDto> source);

    FarawayDetailExportVo farawayDetailExportVo(ScFarawayInfoPageVo source);

    List<FarawayDetailExportVo> farawayDetailExportVoList(List<ScFarawayInfoPageVo> sourceList);

    List<FreightTempWeightUpdateReq> freightTempWeightUpdateReq(List<FreightTempWeightDo> sourceList);

    List<FreightTempZonePriceAddReq> freightTempZonePriceAddReq(List<FreightTempZonePriceDo> sourceList);

    FreightTempWeightDo freightTempWeightDo(FreightTempWeightAddReq source);

    FreightTempWeightDo freightTempWeightDo(FreightTempWeightUpdateReq source);

    FreightTempZonePriceDo freightTempZonePriceDo(FreightTempZonePriceAddReq source);

    OperateBillDetailRes operateBillDetailRes(OperateBillDo source);

    List<ObRuleConditionAddReq> obRuleConditionAddReq(List<OperateBillRuleConditionDo> source);

    List<QsCustomerEtVo> qsCustomerEt(List<QsCustomerVoVo> source);

    @Mapping(source = "id", target = "tableId")
    FreightScOverUpdateReq freightScOverUpdateReq(FreightOverScEt source);

    @Mapping(source = "id", target = "tableId")
    FreightScFarawayUpdateReq freightScFarawayUpdateReq(FreightFarawaySurchargeDo source);

    @Mapping(source = "id", target = "tableId")
    FreightScSignUpdateReq freightScSignUpdateReq(FreightFarawaySurchargeDo source);

    @Mapping(source = "scanType", target = "type")
    @Mapping(source = "returnNo", target = "orderNo")
    OrderScanResultVo orderScanResultDto(OrderReturnPageDto source);

    List<OrderScanResultVo> orderScanResultDto(List<OrderReturnPageDto> source);

    ProductStockFlowingDo productStockFlowingDo(ProductFlowingInEt source);

    ProductStockFlowingDo productStockFlowingDo(ProductFlowingOutEt source);

    Size size(OrProductPageDto source);

    List<PlatformOrderRegularInfoDo> platformOrderRegularInfoDo(List<PlatRegularInfoAddReq> source);

    List<PlatformOrderSplitRegularInfoDo> platformOrderSplitRegularInfoDo(List<PlatRegularSplitInfoAddReq> source);

    CostInfoEntity costInfoEntity(CostAddEt source);

    CostDo costDo(CostInfoEntity source);

    TrialOmsReq trialOmsReq(OrderOutCostReq req);

    OrderInputShelfDetailVo shelfDoToShelfDetailVo(OrderInputShelfDo orderInputShelfDo);

    Size productDoToSize(ProductDo productDo);

    Size orderBoxDoToSize(OrderBoxDo orderBoxDo);

    WaveDetail waveDoToWaveDetail(OutboundWaveDo waveDo);

    WavePickingDetail waveDoToWavePickingDetail(OutboundWaveDo waveDo);

    OutboundPickingDo copyPickingDo(OutboundPickingDo pickingDo);

    OutboundPackageDetail packageDoToPackageDetail(OrderOutboundPackageDo packageDo);

    TrialProductReq productDoToTrialProductReq(ProductDo productDo);

    TrialBoxReq packageDoToTrialBoxReq(OrderOutboundPackageDo packageDo);

    TrialBoxReq boxDoToTrialBoxReq(OrderBoxDo boxDo);

    @Mapping(source = "signatureService", target = "signatureService", qualifiedByName = "stringToInteger")
    void normalOutboundSaveBoToOutboundDo(NormalOrderOutboundSaveBo bo, @MappingTarget OrderOutboundDo outboundDo);

    void transferOutboundSaveBoToOutboundDo(TransferOrderOutboundSaveBo bo, @MappingTarget OrderOutboundDo outboundDo);

    NormalOutboundDetail outboundDoToNormalOutboundDetail(OrderOutboundDo outboundDo);

    TransferOutboundDetail outboundDoToTransferOutboundDetail(OrderOutboundDo outboundDo);

    TransferOutboundDetail.TransferBoxTypeInfo boxDoToTransferBoxTypeInfo(OrderBoxDo boxDo);

    TransferOutboundPickingDetail outboundDoToTransferOutboundPickingDetail(OrderOutboundDo outboundDo);

    TransferOutboundPackDetail.ProductInfo productDoToTransferOutboundPackProductInfo(ProductDo productDo);

    TransferOutboundPackDetail.ProductInfo boxDoToTransferOutboundPackProductInfo(OrderBoxDo boxDo);

    OrderOutboundPackageDo packPackageInfoToPackageDo(TransferOutboundPackBo.PackageInfo packageInfo);

    AllocateOutExportByFbaDto allocateVoToAllocateOutExportByFbaDto(AllocatePlanBatchVo vo);

    void addressBookDoToAllocateOutExportByFbaDto(AddressBookDo addressBookDo, @MappingTarget AllocateOutExportByFbaDto dto);

    AllocateOutExportByFbaItemDto allocateItemDoToAllocateOutExportByFbaItemDto(AllocatePlanItemDo planItemDo);

    void normalOutboundUpdateBoToOutboundDo(NormalOutboundUpdateBo bo, @MappingTarget OrderOutboundDo outboundDo);

    AllocateOutExportBy3WhDto allocateVoToAllocateOutExportBy3WhDto(AllocatePlanBatchVo vo);

    void addressBookDoToAllocateOutExportBy3WhDto(AddressBookDo addressBookDo, @MappingTarget AllocateOutExportBy3WhDto dto);

    void planItemDoToAllocateOutExportBy3WhDto(AllocatePlanItemDo planItemDo, @MappingTarget AllocateOutExportBy3WhDto dto);

    @Mapping(source = "salesPlatform", target = "salesPlatform", qualifiedByName = "stringToInteger")
    @Mapping(source = "signatureService", target = "signatureService", qualifiedByName = "stringToInteger")
    void normalOutImportByRowDtoToOutboundDo(NormalOutImportByRowDto rowDto, @MappingTarget OrderOutboundDo outboundDo);

    @Mapping(source = "salesPlatform", target = "salesPlatform", qualifiedByName = "stringToInteger")
    @Mapping(source = "signatureService", target = "signatureService", qualifiedByName = "stringToInteger")
    void normalOutImportByColDtoToOutboundDo(NormalOutImportByColDto colDto, @MappingTarget OrderOutboundDo outboundDo);

    NormalOutExportOmsDto normalOutboundVoToNormalOutExportOmsDto(NormalOutboundVo vo);

    NormalOutExportOmsDto copyNormalOutExportOmsDto(NormalOutExportOmsDto dto);

    NormalOutExportBySimpleDto normalOutboundVoToNormalOutExportBySimpleDto(NormalOutboundVo vo);

    NormalOutExportWmsDto normalOutboundVoToNormalOutExportWmsDto(NormalOutboundVo vo);

    NormalOutExportWmsDto copyNormalOutExportWmsDto(NormalOutExportWmsDto dto);

    TransferOutExportBySkuOmsDto transferOutVoToTransferOutExportBySkuOmsDto(TransferOutboundVo vo);

    TransferOutExportBySkuOmsDto copyTransferOutExportBySkuOmsDto(TransferOutExportBySkuOmsDto dto);

    TransferOutExportByBoxOmsDto transferOutVoToTransferOutExportByBoxOmsDto(TransferOutboundVo vo);

    TransferOutExportByBoxOmsDto copyTransferOutExportByBoxOmsDto(TransferOutExportByBoxOmsDto dto);

    TransferOutExportBySimpleDto transferOutVoToTransferOutExportBySimpleDto(TransferOutboundVo vo);

    TransferOutExportBySkuWmsOmpDto transferOutVoToTransferOutExportBySkuWmsOmpDto(TransferOutboundVo vo);

    TransferOutExportBySkuWmsOmpDto copyTransferOutExportBySkuWmsOmpDto(TransferOutExportBySkuWmsOmpDto dto);

    TransferOutExportByBoxWmsOmpDto transferOutVoToTransferOutExportByBoxWmsOmpDto(TransferOutboundVo vo);

    TransferOutExportByBoxWmsOmpDto copyTransferOutExportByBoxWmsOmpDto(TransferOutExportByBoxWmsOmpDto dto);

    @Mapping(source = "destinationType", target = "destinationType", qualifiedByName = "stringToInteger")
    @Mapping(source = "outboundMode", target = "outboundMode", qualifiedByName = "stringToInteger")
    void transferOutImportByColDtoToOutboundDo(TransferOutImportByColDto colDto, @MappingTarget OrderOutboundDo outboundDo);

    @Mapping(source = "destinationType", target = "destinationType", qualifiedByName = "stringToInteger")
    @Mapping(source = "outboundMode", target = "outboundMode", qualifiedByName = "stringToInteger")
    void transferOutImportByRowDtoToOutboundDo(TransferOutImportByRowDto rowDto, @MappingTarget OrderOutboundDo outboundDo);

    ProductStockRackDo copyProductStockRackDo(ProductStockRackDo stockRackDo);

    OrderFileByThirdPartyDto copyOrderFileByThirdPartyDto(OrderFileByThirdPartyDto thirdPartyDto);

    OrderFileBySagawaDto outboundOldExportDtoToOrderFileBySagawaDto(OutboundOldExportDto oldExportDto);

    OrderFileByBlackCatDto outboundOldExportDtoToOrderFileByBlackCatDto(OutboundOldExportDto oldExportDto);

    OrderFileByBlackCatDto copyOrderFileByBlackCatDto(OrderFileByBlackCatDto catDto);

    @Mapping(source = "expectedDate", target = "expectedDate", qualifiedByName = "stringToDate")
    void inputSaveBoToInputDo(OrderInputSaveBo bo, @MappingTarget OrderInputDo inputDo);

    OrderBoxDo inputBoxAddBoToOrderBoxDo(OrderInputBoxAddBo orderInputBoxAddBo);

    OrderInputDetailVo inputDoToOrderInputDetailVo(OrderInputDo inputDo);

    OrderBoxDo copyOrderBoxDo(OrderBoxDo boxDo);

    OrderInputDo normalInboundImportDtoToInputDo(NormalInboundImportDto dtoByTrackNo);

    OrderInputDo transferInboundImportDtoToInputDo(TransferInboundImportDto dtoByTrackNo);

    TransferInboundExportDto inputListVoToTransferInboundExportDto(OrderInputListVo inputListVo);

    NormalInboundByBoxExportDto inputListVoToNormalInboundByBoxExportDto(OrderInputListVo inputListVo);

    NormalInboundBySkuExportDto inputListVoToNormalInboundBySkuExportDto(OrderInputListVo inputListVo);

    @Mapping(source = "expireTime", target = "expireTime", qualifiedByName = "stringToDate")
    ClaimDo claimAddBoToClaimDo(ClaimAddBo claimAddBo);

    ClaimDetailVo claimDoToClaimDetailVo(ClaimDo claimDo);

    ClaimWmsDto claimDoToClaimWmsDto(ClaimDo claimDo);

    ClaimOmsDto claimDoToClaimOmsDto(ClaimDo claimDo);

    @Mapping(source = "expectedArrivalDate", target = "expectedArrivalDate", qualifiedByName = "stringToDate")
    @Mapping(source = "planShipmentTime", target = "planShipmentTime", qualifiedByName = "stringToDate")
    AllocatePlanDo allocateAddBoToAllocateDo(AllocatePlanAddBo allocatePlanAddBo);

    AllocatePlanItemDo copyAllocateItemDo(AllocatePlanItemDo planItemDo);

    void pairProductItemBoToAllocateItemDo(PairProductItemBo pairProductItemBo, @MappingTarget AllocatePlanItemDo planItem);

    @Mapping(source = "expectedArrivalDate", target = "expectedArrivalDate", qualifiedByName = "stringToDate")
    @Mapping(source = "planShipmentTime", target = "planShipmentTime", qualifiedByName = "stringToDate")
    void allocateUpdateBoToAllocateDo(AllocatePlanUpdateBo planUpdateBo, @MappingTarget AllocatePlanDo planDo);

    AllocatePlanBatchVo allocateDoToAllocateVo(AllocatePlanDo planDo);

    AllocatePickingDetail allocateDoToAllocatePickingDetail(AllocatePlanDo planDo);

    MaterialDo materialAddBoToMaterialDo(MaterialAddBo materialAddBo);

    void materialUpdateBoToMaterialDo(MaterialUpdateBo materialUpdateBo, @MappingTarget MaterialDo materialDo);

    ProductDo productAddBoToProductDo(ProductAddBo productAddBo);

    void productUpdateBoToProductDo(ProductUpdateBo productUpdateBo, @MappingTarget ProductDo productDo);

    ProductVo productDoToProductVo(ProductDo productDo);

    ProductDo normalReceiptConfirmNewProductBoToProductDo(NormalReceiptConfirmNewProductBo normalReceiptConfirmNewProductBo);

    ProductDo productImportDtoV2ToProductDo(ProductImportDtoV2 productImportDtoV2);

    ProductExportDtoV2 productDoToProductExportDtoV2(ProductDo productDo);

    PrintSkuEt productDoToPrintSkuEt(ProductDo productDo);

    void productImportUpdateOmsDtoV2ToProductDo(ProductImportUpdateOmsDtoV2 dto, @MappingTarget ProductDo productDo);

    SowWallDo sowWallAddBoToSowWallDo(SowWallAddBo sowWallAddBo);

    SkuAdjustItemReq skuAdjustItemApiBoToSkuAdjustItemReq(SkuAdjustItemApiBo itemApiBo);

    StockOmpExportBySku skuStockPageDtoToStockOmpExportBySku(SkuStockPageDto pageDto);

    void productDoToStockOmpExportBySku(ProductDo productDo, @MappingTarget StockOmpExportBySku stockOmpExportBySku);

    StockOmsExportBySku skuStockPageDtoToStockOmsExportBySku(SkuStockPageDto pageDto);

    void productDoToStockOmsExportBySku(ProductDo productDo, @MappingTarget StockOmsExportBySku stockOmsExportBySku);

    StockOmpExportByBox boxTypeStockPageDtoToStockOmpExportByBox(BoxTypeStockPageDto pageDto);

    StockOmsExportByBox boxTypeStockPageDtoToStockOmsExportByBox(BoxTypeStockPageDto pageDto);

    StorageAreaDo storageAreaAddBoToStorageAreaDo(StorageAreaAddBo storageAreaAddBo);

    StorageAreaDo storageAreaUpdateBoToStorageAreaDo(StorageAreaUpdateBo storageAreaUpdateBo);

    StorageAreaDo storageAreaImportDtoToStorageAreaDo(StorageAreaImportDto importDto);

    StorageLocationDo locationAddBoToLocationDo(StorageLocationAddBo storageLocationAddBo);

    void locationUpdateBoToLocationDo(StorageLocationUpdateBo req, @MappingTarget StorageLocationDo locationDo);

    StorageLocationDo locationAddImportDtoToLocationDo(StorageLocationAddImportDto locationAddImportDto);

    WarehouseDo warehouseAddBoToWarehouseDo(WarehouseAddBo warehouseAddBo);

    void warehouseUpdateBoToWarehouseDo(WarehouseUpdateBo warehouseUpdateBo, @MappingTarget WarehouseDo warehouseDo);

    WorkOrderReplyDo workOrderReplyAddBoToWorkOrderReplyDo(WorkOrderReplyAddBo workOrderReplyAddBo);

    WorkOrderDo workOrderAddBoToWorkOrderDo(WorkOrderAddBo workOrderAddBo);

    WorkOrderDo workOrderUpdateBoToWorkOrderDo(WorkOrderUpdateBo workOrderUpdateBo);

    WorkOrderDetail workOrderDoToWorkOrderDetail(WorkOrderDo workOrderDo);

    WorkOrderVo workOrderDoToWorkOrderVo(WorkOrderDo workOrderDo);

    void orderBoxDoToInputBoxTypeNumberVo(OrderBoxDo orderBoxDo, @MappingTarget InputBoxTypeNumberVo inputBoxTypeNumberVo);
}
